Traditional methods of distributing workload between client devices and remotely located computing resources may rely on defined interfaces between programs executing on client devices and services provided by remote computing facilities. A program executing on the client might, for example, be designed to include instructions for invoking calls to various methods of a pre-defined set of web services. Similarly, web services might be designed to provide a specific set of functionality that was considered, at design time, to be best performed by a service running at a remote computing facility, rather than performed by a client device. In other words, the boundary between a program executing on a client device and remote computing resources is set at design time. The boundary may be set based on various assumptions, such as the capabilities of the client device and the availability of the remote computing resources. These assumptions, however, may change over time.